﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Data.OleDb;
using System.IO;

namespace DiaryPlanner
{
    public partial class AlbumPhoto : PictureBox
    {
        public ContextMenu photoMenu = new ContextMenu();
        public Album thisAlbumObject;
        public String photoName;//*****************파일명(id)
        public String photoMemo;//contents

        public AlbumPhoto(Album ab)
        {
            thisAlbumObject = ab;
            photoMenu.MenuItems.Add("삭제", deletePhoto);
            InitializeComponent();
        }

        public void deletePhoto(object sender, EventArgs e)
        {
            PhotoDeleteCheck pdc = new PhotoDeleteCheck(thisAlbumObject);
            pdc.ShowDialog();
            pdc = null;
            if (thisAlbumObject.photoDeleteChecker == false)
            {
                return;
            }

            photoDeleteExecute();
            
        }

        public void photoDeleteExecute() {

            //해당 사진을 삭제
            thisAlbumObject.nowFolder.PhotoList.Remove(this);
            thisAlbumObject.nowPhoto = null;
            //thisAlbumObject.photoPanel.Controls.Remove(this);
            thisAlbumObject.viewAllPhoto();
            this.Image.Dispose();
            this.Image = null;

            //디렉토리에서 사진  삭제
            GC.Collect();
            try
            {
                File.Delete(Application.StartupPath+"/UserImage/" + UserProfile.Instance().userId + "/Album/" + thisAlbumObject.nowFolder.realName + "/" + photoName);
                
            }
            catch(System.IO.IOException ex)
            {
                MessageBox.Show(ex.ToString());
            }

            del_db(photoName);
        }

        private void AlbumPhoto_Click(object sender, EventArgs e)
        {
            thisAlbumObject.nowPhoto = this;
            PhotoViewer pv = new PhotoViewer(thisAlbumObject);
            pv.ShowDialog();
        }

        private void AlbumPhoto_MouseDown(object sender, MouseEventArgs e)
        {
            //mouse down 왼쪽 이벤트는 처리하지 않음
            if ((e.Button & MouseButtons.Left) == MouseButtons.Left) return;

            //오른쪽 마우스 down 이벤트만 처리


            //이 사진을 삭제한다
            thisAlbumObject.nowPhoto = this;
            Point m = this.PointToClient(new Point(Control.MousePosition.X, Control.MousePosition.Y));
            photoMenu.Show(this, m);
        }


        public void del_db(string picname)
        {
            try
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                         + "data source = "  //데이터 소스=(경로입력하라는거)
                                         + Application.StartupPath ///상대경로 읽어옴
                                         + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [photo]";//memos테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "photo"); //DS라는 데이터셋에 새로운 memos 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["photo"];//memos테이블을 불러와 aTable을 새로 생성해서 저장

                DataColumn[] PrimaryKey = new DataColumn[1];

                PrimaryKey[0] = aTable.Columns["Pname"]; //a컬럼을 기본키를 설정

                aTable.PrimaryKey = PrimaryKey;//기본키 할당

                DataRow currRow1 = aTable.Rows.Find(picname); //textBox값인 기본키 선택
                currRow1.Delete(); //삭제

                DBAdapter.Update(DS.GetChanges(DataRowState.Deleted), "photo");
            }
            catch (DataException DE)
            {
                MessageBox.Show(DE.Message);
            }
            catch (Exception DE)
            {
                MessageBox.Show(DE.Message);
            }
        }
    }
}